﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using NUnit.Framework;          //--> Tests unitaire
using INSTA.AI97.BankApp.BLL;   //--> Notre couche métier

namespace INSTA.AI97.BankApp.Tests
{
    [TestFixture]
    class Test_AccountFactory
    {
        [Test]
        public void Test_Method_Create_ForSimple()
        {
            AccountBase account = AccountFactory.Create(new Customer(), 100);            

            // On s'assure que le compte créé est bien du 
            // type attendu : 3 Syntaxes possibles :
            
            //Assert.IsTrue(account.GetType() == typeof(SimpleAccount));
            //Assert.IsTrue(account is SimpleAccount);
            Assert.IsInstanceOf<SimpleAccount>(account);

        }


        [Test]
        public void Test_Method_Create_ForSilver()
        {
            AccountBase account = AccountFactory.Create(new Customer(), 1100);

            // On s'assure que le compte créé est bien du 
            // type attendu : 3 Syntaxes possibles :

            //Assert.IsTrue(account.GetType() == typeof(SimpleAccount));
            //Assert.IsTrue(account is SimpleAccount);
            Assert.IsInstanceOf<SilverAccount>(account);

        }


        [Test]
        public void Test_Method_Create_ForGold()
        {
            AccountBase account = AccountFactory.Create(new Customer(), 3001);

            // On s'assure que le compte créé est bien du 
            // type attendu : 3 Syntaxes possibles :

            //Assert.IsTrue(account.GetType() == typeof(SimpleAccount));
            //Assert.IsTrue(account is SimpleAccount);
            Assert.IsInstanceOf<GoldAccount>(account);

        }


        [Test]
        public void Test_Method_Create_ForException1()
        {
            Exception ex = null;

            try
            {
                AccountBase account = AccountFactory.Create(new Customer(), -1);
            }
            catch (Exception generatedException)
            {
                ex = generatedException;
            }

            Assert.IsNotNull(ex);

        }


        [Test]
        public void Test_Method_Create_ForException2()
        {
            Assert.Throws<Exception>(() => AccountFactory.Create(new Customer(), -1));

        }





















    }
}
